Programming Level-up Course - Overview

Table of Contents

1. Welcome!

Welcome to the Programming Level-up Course. In this series of lectures, we will cover everything we need to be able to program in a Linux-based environment, and use the high performance computers (also called cluster/supercomputers) to run experiments.

2. Contact information

You can find my personal page over at: https://pageperso.lis-lab.fr/jay.morgan/

As we progress through the lectures, I will also make the course publicly available. These lectures will be hosted at: https://pageperso.lis-lab.fr/jay.morgan/teaching.html in a variety of formats (i.e. PDF, HTML).

If you have any questions please email me directly. My email address is jay.morgan@lis-lab.fr. Other modes of contact can be found on my personal website listed above.

3. Delivery

  • 10 2-hour sessions
  • Each session will be conducted in a computer lab and will be combination of a lecture and exercises
  • The course is intended to get everyone up-to-speed with the various facets of programming you will need in other courses.
  • If time allows, each lecture will have an exercise – though this is not a strict requirement. These exercises are not marked but serve to get you thinking about what you've learnt in the lecture.

4. Resources

This course aims to deliver everything you need. If you attend each lecture, you will know what you need for the following lectures. Despite this design, however, I have included a list of additional resources below. These resources are optional, but they will take you beyond what you're taught in these sessions and enable you to become a Programming Master!

4.1. Books

There is nothing like a good book to learn from. They are usually rich in content, but also provide reasonable enough depth to the subject matter to not only learn how things work, but also why they work the way they do.

  • Think Python: An Introduction to Software Design - Livre d'Allen B. Downey
  • Numerical Python: Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib - Livre de Robert Johansson.
  • Classic Shell Scripting - Livre de Arnold Robbins, Nelson H F Beebe

4.2. Online resources

For other, more niche, subject matters, online resources provide the most reasonable information to learn from.

4.3. Software used in this course

After we're introduced to the Python programming language, and we're comfortable creating the most basic scripts, we'll be using a programming environment to make programming easier. When we're ready, we'll discuss both Jupyter notebooks and the PyCharm IDE.

5. What will be taught

The course will cover a broad spectrum of skills used when programming for scientific research. This includes the programming and scripting itself (in our case, Python programming), managing the environment in which we work (i.e. working in a Linux-based environment and managing our projects with version control), and interacting with the supercomputers to perform intensive computations.

5.1. Python programming

  • Basic syntax
  • Data structures
  • Advanced syntax
  • Modules
  • Anaconda and Pip
  • Different programming development environments
    • PyCharm
    • Jupyter Notebooks
  • Numerical computing in python
    • Introduction to numpy
    • Pandas
    • Scipy
    • Visualisation using Matplotlib/seaborn/altair.

5.2. GNU/Linux

  • Basics of GNU/Linux and terminal
  • Creating bash scripts
  • Using the university proxy
  • Git version control

5.3. Using High Performance/Cloud Computing

  • GPU management (CUDA, CuDNN, nvidia-smi)
  • SLURM
  • Google Cloud, AWS
  • Singularity

5.4. Reporting Results

  • Markdown
  • LaTeX

6. A rough timeline

I have included below a rough indication of whats going to be taught and when. Of course, this is subject to change based upon scheduling constraints and rate of progression.

Week Topic Description
1 Introduction - Course introduction
    - Basic Python programming
2 Python classes  
3 Project management - Creating/importing modules
    - Anaconda/pip
4 Programming environments - PyCharm
    - Jupyter notebooks
5 Numerical computing - Numpy
    - Scipy
6 Numerical computing - Pandas
    - Visualisations
7 Basics of GNU/Linux - Using the terminal
8 Bash scripting  
9 High performance computing - SLURM
    - Singularity
10 Reporting - LaTeX
    - Markdown

Date: September 2021

Author: Jay Morgan

Created: 2021-09-11 sam. 16:11

Validate